﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RC.ControlAcceso.ObjetosNegocio;
using DevExpress.Web.ASPxEditors;


public partial class CAPersonal : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        if(!IsPostBack)
        {
            MenuSuperior1.Encabezado("Personal");

            //lo pongo en estado insetar si el ID no es especificado o el numero es menor o igual a 0
            int _legajoNumero;
            if (Request.QueryString["ID"] == null)
                if (CA2Parametros.EsModuloDeDelfos == false)
                    fvPersonal.ChangeMode(FormViewMode.Insert);
            else
            {
                if (int.TryParse(Request.QueryString["ID"], out _legajoNumero) == true)
                    if(_legajoNumero <= 0)
                        if(CA2Parametros.EsModuloDeDelfos == false)
                            fvPersonal.ChangeMode(FormViewMode.Insert);
             }           
        }
    }
    protected void btnActivar_Click(object sender, EventArgs e)
    {
        ((HiddenField)fvPersonal.FindControl("hfActivo")).Value = false.ToString();
        fvPersonal.UpdateItem(true);
        
    }
    protected void btnInactivo_Click(object sender, EventArgs e)
    {
        ((HiddenField)fvPersonal.FindControl("hfActivo")).Value = true.ToString();
        fvPersonal.UpdateItem(true);
    }
    protected void fvPersonal_DataBound(object sender, EventArgs e)
    {
        if(fvPersonal.CurrentMode == FormViewMode.Edit)
        {
            CA2Personal  dv = (CA2Personal)fvPersonal.DataItem;
            DropDownList ddl2 = (DropDownList)fvPersonal.FindControl("ddlRotaciones");
            System.Web.UI.WebControls.ObjectDataSource dsc =  (System.Web.UI.WebControls.ObjectDataSource)fvPersonal.FindControl("dsHorariosTurno");
            dsc.SelectParameters["pIdTurno"].DefaultValue = dv.IdTurno.ToString();
            ddl2.DataBind();
            if( dv.IdTurno > 0 )
            {
                ddl2.SelectedValue = dv.TurnoInicio.ToString();
            }
        }
    }
    protected void fvPersonal_ItemUpdating(object sender, FormViewUpdateEventArgs e)
    {
        DropDownList ddl2 = (DropDownList)fvPersonal.FindControl("ddlRotaciones");
        e.NewValues["TurnoInicio"] = ddl2.SelectedValue;

        ddl2 = (DropDownList)fvPersonal.FindControl("ddlSector");
        e.NewValues["IdSector"] = ddl2.SelectedValue;
        
    }
    protected void ddlTurno_SelectedIndexChanged(object sender, EventArgs e)
    {
        System.Web.UI.WebControls.ObjectDataSource dsc =  (System.Web.UI.WebControls.ObjectDataSource)fvPersonal.FindControl("dsHorariosTurno");
        DropDownList ddl1 = (DropDownList)fvPersonal.FindControl("ddlTurno");
        DropDownList ddl2 = (DropDownList)fvPersonal.FindControl("ddlRotaciones");
        dsc.SelectParameters[0].DefaultValue = ddl1.SelectedValue;
        ddl2.DataBind();
    }
    protected void fvPersonal_ItemInserting(object sender, FormViewInsertEventArgs e)
    {
        e.Values["Activo"] = false.ToString();
        DropDownList ddl2 = (DropDownList)fvPersonal.FindControl("ddlRotaciones");
        e.Values["TurnoInicio"] = ddl2.SelectedValue;
    }
    protected void fvPersonal_ItemInserted(object sender, FormViewInsertedEventArgs e)
    {
        int _numeroLegajo;
        int.TryParse(e.Values["NumeroLegajo"].ToString(), out _numeroLegajo);
        Response.Redirect("CAPersonal.aspx?ID=" + _numeroLegajo.ToString());
    }
    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        DropDownList _combo = (DropDownList)fvPersonal.FindControl("ddlRotaciones");
        if (_combo.SelectedIndex < 0)
            args.IsValid = false;
        else
            args.IsValid = true;
    }
    protected void cvalLegajoUnico_ServerValidate(object source, ServerValidateEventArgs args)
    {
        string _NumeroLegajo = ((TextBox)fvPersonal.FindControl("NumeroLegajoTextbox")).Text;

        int _numLegajo;
        if (int.TryParse(_NumeroLegajo, out _numLegajo) == false)
            args.IsValid = false;
        else
        {
            //verifico si el legajo existe
            CA2Personal _persona = CA2Personal.ObtenerPersonalPorNumeroDeLegajo(_numLegajo);
            if ((_persona == null)
                || _persona.IdPersonal <= 0)
                args.IsValid = true;
            else
                args.IsValid = false;
        }
    }
    private void Buscar()
    {
        popBusqueda.ShowOnPageLoad = true;
    }
    protected void txtBuscar_TextChanged(object sender, EventArgs e)
    {
        Buscar();
    }
    protected void btnBuscar_Click1(object sender, ImageClickEventArgs e)
    {
        Buscar();
    }
    protected void TextBox_Load(object sender, EventArgs e)
    {
        TextBox _tb;
        Label _lbl;
        ASPxButton _btn;
        ASPxComboBox _cmb;

        if (sender.GetType().Name == "TextBox")
        {
            _tb = (TextBox)sender;
            if (CA2Parametros.EsModuloDeDelfos == true)
            {
                _tb.Visible = false;
            }
        }
        if (sender.GetType().Name == "Label")
        {
            _lbl = (Label)sender;
            if (CA2Parametros.EsModuloDeDelfos == true)
                _lbl.Visible = true;
        }
        if (sender.GetType().Name == "ASPxButton")
        {
            _btn = (ASPxButton)sender;
            if (CA2Parametros.EsModuloDeDelfos == true)
            {
                //_tb.Visible = false;
                _btn.Enabled = false;
                _btn.ToolTip = "La creación del personal se realiza desde Delfos";
            }
        }
        if (sender.GetType().Name == "ASPxComboBox")
        {
            _cmb = (ASPxComboBox)sender;
            if (CA2Parametros.EsModuloDeDelfos == true)
                _cmb.Visible = false;
        }
    }
    protected void btnActualizar_Click(object sender, EventArgs e)
    {

    }

    #region Metodos para agregar el elemento que no existe en la lista
    protected void dsTarjetasDisponibles_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {

        // Debo verificar si hay una tarjeta asignada a esta persona y si la misma esta en el listado, en caso de no estar, debo agregarla al listado para que se pueda selecciona
        int _PersonalLegajo = 0;
        ((CA2TarjetaColeccion)e.ReturnValue).Add(CA2Tarjeta.CrearTarjeta(0));
        if (Request.QueryString["ID"] != null)
        {
            int.TryParse(Request.QueryString["ID"].ToString(), out _PersonalLegajo);
            if (_PersonalLegajo > 0)
            {
                //obtengo la persona
                CA2Personal _persona = CA2Personal.ObtenerPersonalPorNumeroDeLegajo(_PersonalLegajo);

                if ((_persona == null) //si no es valida, salgo
                    || _persona.IdPersonal <= 0)
                    return;

                ((CA2TarjetaColeccion)e.ReturnValue).Add(_persona.TarjetaActiva);
            }
        }
    }
    protected void dsRazonesSociales_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        // Debo verificar si hay una empersa asignada a esta persona y si la misma esta en el listado, en caso de no estar, debo agregarla al listado para que se pueda selecciona
        int _PersonalLegajo = 0;
        //((CA2TarjetaColeccion)e.ReturnValue).Add(CA2Tarjeta.CrearTarjeta(0));
        if (Request.QueryString["ID"] != null)
        {
            int.TryParse(Request.QueryString["ID"].ToString(), out _PersonalLegajo);
            if (_PersonalLegajo > 0)
            {
                //obtengo la persona
                CA2Personal _persona = CA2Personal.ObtenerPersonalPorNumeroDeLegajo(_PersonalLegajo);

                if ((_persona == null) //si no es valida, salgo
                    || _persona.IdPersonal <= 0)
                    return;

                //verifico en el listado obtenido si la empresa existe, si no esta, la agrego
                CA2RazonSocialColeccion _razonesSociales = (CA2RazonSocialColeccion)e.ReturnValue;
                foreach (CA2RazonSocial _razonSocial in _razonesSociales)
                    if (_razonSocial.ID == _persona.IdRazonSocial)
                        return;

                //verifico si la empresa es nula (no esta en la base de datos y hago la modificación para que no largue error
                CA2RazonSocial __razonSocial = _persona.RazonSocial;
                //if (__razonSocial == null)
                if ((_persona.IdRazonSocial<= 0)  
                    || (_persona.RazonSocial == null))
                {//si es nula, la agrego y pongo que no fue enconrtada
                    __razonSocial = new CA2RazonSocial();
                    __razonSocial.ID = _persona.IdRazonSocial;
                    __razonSocial.Nombre = CA2Parametros.TextoNoAsignado;
                }


                //si no la encontro en el listado, la agrego al final.
                ((CA2RazonSocialColeccion)e.ReturnValue).Add(__razonSocial);
            }
        }
    }
    protected void dsSectores_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        // Debo verificar si hay un sector asignado a esta persona y si la misma esta en el listado, en caso de no estar, debo agregarla al listado para que se pueda selecciona
        int _PersonalLegajo = 0;
        
        if (Request.QueryString["ID"] != null)
        {
            int.TryParse(Request.QueryString["ID"].ToString(), out _PersonalLegajo);
            if (_PersonalLegajo > 0)
            {
                //obtengo la persona
                CA2Personal _persona = CA2Personal.ObtenerPersonalPorNumeroDeLegajo(_PersonalLegajo);

                if ((_persona == null) //si no es valida, salgo
                    || _persona.IdPersonal <= 0)
                    return;

                //verifico en el listado obtenido si la empresa existe, si no esta, la agrego
                CA2SectorColeccion _sectores = (CA2SectorColeccion)e.ReturnValue;
                foreach (CA2Sector _sector in _sectores)
                    if (_sector.IdSector == _persona.IdSector)
                        return;

                //verifico si es nula (no esta en la base de datos y hago la modificación para que no largue error
                CA2Sector __sector = _persona.Sector;
                if (__sector == null)
                {//si es nula, la agrego y pongo que no fue enconrtada
                    __sector = new CA2Sector();
                    __sector.IdSector = _persona.IdSector;
                    __sector.Descripcion = "-el sector ha sido borrado de la base de datos-";
                }


                //si no la encontro en el listado, la agrego al final.
                ((CA2SectorColeccion)e.ReturnValue).Add(__sector);
            }
        }
    }
    protected void dsEmpresas_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        // Debo verificar si hay una empersa asignada a esta persona y si la misma esta en el listado, en caso de no estar, debo agregarla al listado para que se pueda selecciona
        int _PersonalLegajo = 0;
        if (Request.QueryString["ID"] != null)
        {
            int.TryParse(Request.QueryString["ID"].ToString(), out _PersonalLegajo);
            if (_PersonalLegajo > 0)
            {
                //obtengo la persona
                CA2Personal _persona = CA2Personal.ObtenerPersonalPorNumeroDeLegajo(_PersonalLegajo);

                if ((_persona == null) //si no es valida, salgo
                    || _persona.IdPersonal <= 0)
                    return;

                //verifico en el listado obtenido si la empresa existe, si no esta, la agrego
                CA2EmpresaColeccion _empresas = (CA2EmpresaColeccion)e.ReturnValue;
                foreach (CA2Empresa _empresa in _empresas)
                    if (_empresa.IdEmpresa == _persona.IdEmpresa)
                        return;

                //verifico si la empresa es nula (no esta en la base de datos y hago la modificación para que no largue error
                CA2Empresa __empresa = _persona.Empresa;
                //if (__empresa == null)
                if(_persona.IdEmpresa <=0)    
                {//si es nula, la agrego y pongo que no fue enconrtada
                    __empresa = new CA2Empresa();
                    __empresa.IdEmpresa = _persona.IdEmpresa;
                    __empresa.Nombre = CA2Parametros.TextoNoAsignado;
                }

                //si no la encontro en el listado, la agrego al final.
                ((CA2EmpresaColeccion)e.ReturnValue).Add(__empresa);
            }
        }
    }
    protected void dsTurnos_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        if(fvPersonal.CurrentMode == FormViewMode.Edit)
        {
        // Debo verificar si el turno especificado existe en la coleccion, si no existe, doy de alta en la coleccion el item "-no especificado-" con id = -1
        int _PersonalLegajo = 0;
        int.TryParse(Request.QueryString["ID"].ToString(), out _PersonalLegajo);
        if (_PersonalLegajo > 0)
        {
            //obtengo la persona
            CA2Personal _persona = CA2Personal.ObtenerPersonalPorNumeroDeLegajo(_PersonalLegajo);

            if ((_persona == null) //si no es valida, salgo
                || _persona.IdPersonal <= 0)
                return;

            bool _elvalorEsta = false;
            foreach (CA2Turno _turno in ((CA2TurnoColeccion)e.ReturnValue))
                if (_turno.IdTurno == _persona.IdTurno)
                    _elvalorEsta = true;

            if(_elvalorEsta == false)
            {
                CA2Turno _turnito = new CA2Turno();
                _turnito.IdTurno = _persona.IdTurno;
                _turnito.Descripcion = CA2Parametros.TextoNoAsignado;

                ((CA2TurnoColeccion)e.ReturnValue).Add(_turnito);
                }
        }
        }
    }
    #endregion
}